# 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
#  如果反转后整数超过 32 位的有符号整数的范围 [−2³¹, 231 − 1] ，就返回 0。
# 假设环境不允许存储 64 位整数（有符号或无符号）。
#
#  示例 1：
# 输入：x = 123
# 输出：321
#
#  示例 2：
# 输入：x = -123
# 输出：-321
#
#  示例 3：
# 输入：x = 120
# 输出：21
#
#  示例 4：
# 输入：x = 0
# 输出：0

class Solution:
    def reverse(self, x) -> int:
        """
        :type x: int
        :rtype: int
        """
        INT_MIN, INT_MAX = -2 ** 31, 2 ** 31 - 1

        sign = 1 if x > 0 else -1
        x = x if x > 0 else -x  # 忽略符号位
        if x > INT_MAX or x < INT_MIN:
            return 0

        res = 0
        last = x % 10 # 记录每次末位的数字
        while last != x:
            res = res * 10 + last
            x //= 10
            last = x % 10

        # 最后一位需要单独处理情况如 -99591 等数
        if last != 0:
            res = sign * (res * 10 + last)

        return 0 if (res > INT_MAX or res < INT_MIN) else res


# test code
if __name__ == "__main__":
    x = -99591
    print(Solution().reverse(x))
